<?php






try {
    $out_put = [];
    $redis = new MyRedis();

    $out_put[] = $redis->ping('hello'); // string(5) "hello"
    $out_put[] = $redis->ping(); // bool(true)
//    $out_put[] = $redis->eval("// return -1;", [], 0);
//    $out_put[] = $redis->xRead(['log:web' => '$'], 1, 0);
    $out_put[] = $redis->createTest();
    $out_put[] = $redis->getLastError();
    var_dump($out_put);
} catch (Exception $e) {
    var_dump($e->getMessage());
}

class MyRedis extends Redis
{
    public ?Redis $redis = null;
    public function __construct()
    {
        parent::__construct();
        $this->connect('127.0.0.1');
    }



    public function createTest()
    {
        return $this->xAdd('log:web', '*', ['time' => time(), 'call' => 'a:show', 'type' => 1], 10000);
    }


    //String应用场景::单值缓存
    //String应用场景::对象缓存
    //String应用场景::分布式锁
    //String应用场景::计数器
    //String应用场景::web集群session共享
    //String应用场景::分布式系统全局序列号 一次拿多个序列号
    public function strStore()
    {

    }

    //hash应用场景::对象缓存 对于用户数据:缓存数据分段(取模)多个key存储
    //hash应用场景::电商购物车
    //优点:同类数据归类整合存储,方便管理;比string操作消耗内存与cpu更小;比string节省存储空间
    //缺点:过期功能不能使用在field上,只能使用在key上;集群架构下不适合大规模使用

    //list应用场景::常用数据结构stack,queue,blocking mq
    //list应用场景::微博和微信公众号消息流

    //set应用场景::微信抽奖小程序 1)点击参与抽奖加入集合 2)查看参与抽奖所有用户 3)抽取count名中奖者
    //set应用场景::微信微博点赞,收藏,标签 1)点赞 sadd 2)取消点赞 srem 3)检查用户是否点过赞 sismember 4)获取点赞的用户列表 smembers 5)获取点赞用户数 scard
    //set应用场景::微信微博关注模型 1)关注的人 2)共同关注 3)我关注的人也关注他 4)我可能认识的人
    //set应用场景::电商商品筛选

    //zset应用场景::排行榜 1)点击新闻 2)展示当日排行前十 3)七日搜索榜单计算 4)展示七日排行前十

}
